<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>判断数据类型</title>
</head>

<body>
    <script>
        //1.tyoeof判断基本数据类型
        /*
        数据类型的种类
        1.string: 任意字符串
        2.number:任意数字
        3.null:null
        4.undefined:undefined
        5.boolean:true/false

        //引用数据类型
        6.Object:任意对象
        7.Function:一种特别的对象 可以执行
        8.Array:一种特别的对象，数值下标,内部数据有序

        //es6之后新增
        9.symbol 它的作用在于给对象标记独一无二的属性名或者方法名
         */

        var a = 'yuxiaoyao';
        console.log(typeof (a));
        console.log(typeof (a) == 'string');

        var b = true;
        console.log(typeof (b) == 'boolean');
        // typeof的输出值基本类型对应的字符串


        //注意typeof不能判断  null和object    object和array

        /* instanceof 判断引用数据类型的具体的类型   是不是数组、对象、函数的实例
        */
        var b1 = {
            b2: [1, 'abc', console.log],
            b3: function () {
                console.log('b3');
                return function () {
                    return 'aafafafa';
                }
            }
        }

        console.log(b1 instanceof Object, b1 instanceof Array);
        console.log(b1.b2 instanceof Array, b1.b2 instanceof Object);
        console.log(b1.b3 instanceof Function, b1.b3 instanceof Object);

        console.log(typeof b1.b2, '======================');

        //函数也可以使用typeof方法来判断  返回的是'typeof'字符串
        console.log(typeof b1.b3 == 'function');

        //怎么去输出复杂的  b3里面的返回的字符串呢?
        //总之 是什么类型就去怎么操作，是函数类型就用()去调用,最后返回值是字符串就直接打印即可
        console.log(b1.b3()());


        //还有 === 可以判断null undefined因为它们只有这一个值   
    </script>
</body>

</html>